home *** CD-ROM | disk | FTP | other *** search
- #include <SetUpA4.h>
- #include <traps.h>
- #include <Sound.h>
-
- int numPicts;
- PicHandle picts[30];
- Handle moof;
- long oldGND, oldGOSE;
- long lastTicks;
- Boolean inIt;
- int i;
- int skipNum;
-
-
- pascal DialogPtr NewGND(short dialogID,void *dStorage,WindowPtr behind);
- Boolean NewGOSE();
-
- main()
- {
- Handle h;
- long *l, j;
- Handle procH;
- int cancel;
- Ptr myPtr;
- Handle myHandle;
-
- asm {
- move.l A0,myPtr
- }
- RememberA0();
- SetUpA4();
-
- cancel = FALSE;
- if ((procH = GetResource('PROC', 128)) != 0L) {
- HLock(procH);
- CallPascal(128, 0, *procH);
- j = TickCount() + 60;
- while (!cancel && TickCount() < j) {
- if (Button()) {
- cancel = TRUE;
- CallPascal(129, -1, *procH);
- }
- }
- if (!cancel)
- CallPascal(128, -1, *procH);
- HUnlock(procH);
- } else
- cancel = TRUE;
-
- if (cancel)
- return;
-
- myHandle = RecoverHandle(myPtr);
- DetachResource(myHandle);
-
- moof = GetResource('snd ', 128);
- DetachResource(moof);
-
- numPicts = Count1Resources('PICT');
- for (i = 0; i < numPicts; i++) {
- picts[i] = GetPicture(128 + i);
- DetachResource(picts[i]);
- }
- inIt = FALSE;
- i = 0;
- skipNum = 6;
-
- oldGND = NGetTrapAddress(_GetNewDialog, ToolTrap);
- NSetTrapAddress((long)NewGND, _GetNewDialog, ToolTrap);
- oldGOSE = NGetTrapAddress(_GetOSEvent, OSTrap);
- NSetTrapAddress((long)NewGOSE, _GetOSEvent, OSTrap);
-
- RestoreA4();
- }
-
-
- pascal DialogPtr
- NewGND(short dialogID,void *dStorage,WindowPtr behind)
- {
- Rect r;
- long result;
- GrafPtr oldPort;
-
- SetUpA4();
-
- result = CallPascalL(dialogID, dStorage, behind, oldGND);
-
- if (dialogID == 5066) {
- inIt = TRUE;
- lastTicks = TickCount() + 300;
- i = 0;
- skipNum = 6;
- }
-
- RestoreA4();
-
- return (DialogPtr) result;
- }
-
- Boolean
- NewGOSE()
- {
- Rect r;
- Boolean result;
-
- SetUpA4();
- asm {
- movea.l oldGOSE,A1
- jsr (A1)
- move.b D0,result
- }
-
- if (inIt) {
- if (skipNum > 0)
- skipNum--;
- else {
- if (result) {
- if (inIt && TickCount() > lastTicks) {
- r = FrontWindow()->portRect;
- r.bottom -= 15;
- DrawPicture(picts[i], &r);
- lastTicks = TickCount() + 2;
- if (i == numPicts - 1) {
- /* MOOF! */
- SndPlay((SndChannelPtr) 0, moof, FALSE);
- lastTicks += 60;
- i--;
- } else if (i == numPicts - 2) {
- i--;
- if (Random() % 50 == 0)
- i += 2;
- } else
- i++;
- }
- } else {
- inIt = FALSE;
- }
- }
- }
-
- RestoreA4();
- return result;
- }